package kr.pe.johnkim.carrotpoint.mobile.dao;

import kr.pe.johnkim.carrotpoint.mobile.domain.CarrotPointPoint;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Carrot Point 포인트 관련 dao 클래스 이다.
 *
 * @author : John_Kim <cale9797@gmail.com>
 * @date : 13. 2. 6.
 */
@Repository
public class CarrotPointPointDaoImpl extends SqlSessionDaoSupport implements CarrotPointPointDao {

    // SLF4J Logging
    private Logger logger = LoggerFactory.getLogger(CarrotPointPointDaoImpl.class);

    /**
     * 가맹점에 해당 사용자가 등록되어 있는지 확인 한다.
     *
     * @param carrotPointPoint
     * @return
     */
    @Override
    public CarrotPointPoint getMemberPointExist(CarrotPointPoint carrotPointPoint) {
        logger.info("getMemberPointExist");
        return (CarrotPointPoint)getSqlSession().selectOne("CARROTPOINT_POINT.getMemberPointExist", carrotPointPoint);
    }

    /**
     * 가맹점에서 해당 사용자의 마일리지 점수(정보)를 가져 온다.
     *
     * @param carrotPointPoint
     * @return
     */
    @Override
    public CarrotPointPoint getMemberPointInformation(CarrotPointPoint carrotPointPoint) {
        logger.info("getMemberPointInformation");
        return (CarrotPointPoint)getSqlSession().selectOne("CARROTPOINT_POINT.getMemberPointInformation", carrotPointPoint);
    }

    /**
     * 포인트를 등록 한다.
     *
     * @param carrotPointPoint
     */
    @Override
    public void registerPoint(CarrotPointPoint carrotPointPoint) {
        logger.info("registerPoint");
        this.getSqlSession().insert("CARROTPOINT_POINT.registerPoint", carrotPointPoint);
    }

    /**
     * 사용자의 마일리지 점수를 업데이트 한다.
     *
     * @param carrotPointPoint
     */
    @Override
    public void updatePoint(CarrotPointPoint carrotPointPoint) {
        logger.info("updatePoint");
        this.getSqlSession().update("CARROTPOINT_POINT.updatePoint", carrotPointPoint);
    }

    /**
     * 사용자의 마일리지 목록을 가져 온다.(사용자의 smart phone 에 출력 한다.)
     *
     * @param carrotPointPoint
     * @return
     */
    @Override
    public List<CarrotPointPoint> getMemberMerchantPointList(CarrotPointPoint carrotPointPoint) {
        logger.info("getMemberMerchantPointList");
        return this.getSqlSession().selectList("CARROTPOINT_POINT.getMemberMerchantPointList", carrotPointPoint);
    }

    /**
     * 가맹점에 등록된 사용자의 마일리지 목록을 가져 온다.(가맹점 tablet PC/iPad 에 출력 한다.)
     *
     * @param carrotPointPoint
     * @return
     */
    @Override
    public List<CarrotPointPoint> getMerchantMemberPointList(CarrotPointPoint carrotPointPoint) {
        logger.info("getMerchantMemberPointList");
        return this.getSqlSession().selectList("CARROTPOINT_POINT.getMerchantMemberPointList", carrotPointPoint);
    }

    /**
     * 포인트를 비활성화 한다.
     *
     * @param carrotPointPoint
     */
    @Override
    public void updateDeactivatePoint(CarrotPointPoint carrotPointPoint) {
        logger.info("updateDeactivatePoint");
        this.getSqlSession().update("CARROTPOINT_POINT.updateDeactivatePoint", carrotPointPoint);
    }
}
